<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        // // 1. 二维数组练习, 目的: 用函数把arr变成新数组[10, 7, 18, 39]
        // var arr = [
        //     [1, 2, 3, 4],
        //     [3, 4],
        //     [4, 6, 8],
        //     [11, 28],
        // ];

        // // 一位数组求和
        function get1dSum (nums) {
            var sum = 0;
            for (var i = 0; i < nums.length; i++) {
                sum += nums[i];
            }
            return sum;
        }

        function getSum (numsArr) {
            var result = [];
            for (var i = 0; i < numsArr.length; i++) {
                var nums = numsArr[i]; // [1, 2, 3, 4]
                var subSum = get1dSum(nums);
                result.push(subSum);
            }
            return result;
        }

        // // 数组
        // // 增 arr.push()  arr.unshift()
        // // 删 arr.shift()  arr.pop()  arr.splice(要删除的索引, 删几个)


        // // 2. 封装一个函数 按照以下规则处理数组
        // var arr1 = [1, 2, 'a', 3, 'b', 'c']; // 期待返回值：6
        // var arr2 = [123, 'hello world', 456]; // 期待返回值：579
        // // I/O  input/output 输入/输出
        function getNumSum (arr) {
            var sum = 0;
            for (var i = 0; i < arr.length; i++) {
                if (isNaN(arr[i])) {
                    continue;
                }
                sum += arr[i];
            }
            return sum;
        }

        // 3. 封装一个函数 按照以下规则处理数组
        var arr1 = ['hello', 'world']; // 期待返回值：'hello world'
        var arr2 = ['aaa', 'bb', 'cccc', 'ddd']; // 期待返回值：'aaa bb cccc ddd'
        function concatWords (words) {
            var res = '';
            for (var i = 0; i < words.length; i++) {
                var word = words[i];
                res += ( i === 0 ? '' : ' ' ) + word;
            }
            return res;
        }

        console.log(concatWords(arr1));


        // 4. 封装一个函数 按照以下规则处理数组
        var arr1 = [1, null, 'a', 'hello', 0, NaN, 123]; // 期待返回值：[1, 'a', 'hello', 123]
        var arr2 = ['aaa', '', ' ', null, 'null']; // 期待返回值：['aaa', ' ', 'null']

        // 挑选真值
        function filterReal (arr) {
            var result = [];
            for (var i = 0; i < arr.length; i++) {
                if (arr[i]) {
                    result.push(arr[i]);
                }
            }
            return result;
        }

        // 进阶
        // 1. 封装一个函数 按照以下规则处理数组
        var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
        // 期待返回值：[1, 2, 3, 5, 7, 11, 13]

        var arr2 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
        // 期待返回值：[1, 3, 5, 7, 11, 13, 17]

        var arr3 = [4, 6, 8, 10, 12, 14, 16];
        // 期待返回值：[]

        // 20
        // 2, 3, 4, ... 19
        function isPrimeNum (num) {
            for (var i = 2; i < num; i++) {
                // 判断能否整除
                if (num % i === 0) {
                    return false;
                }
                // if (num / i === parseInt(num / i)) {
                //     return false;
                // }
            }
            return true;
        }

        function filterPrimeNums (nums) {
            var result = [];
            for (var i = 0; i < nums.length; i++) {
                var num = nums[i];
                if (isPrimeNum(num)) {
                    result.push(num);
                }
            }
            return result;
        }

        // 2. leetcode两数之和
        // 输入：nums = [2,7,11,15], target = 9
        // 输出：[0,1]
        // 解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。

        function twoSum (nums, tgt) {
            for (var i = 0; i < nums.length; i++) {
                var n1 = nums[i]; // 2
                for (var j = i + 1; j < nums.length; j++) {
                    var n2 = nums[j];
                    if (n1 + n2 === tgt) {
                        return [i, j];
                    }
                }
            }
            return null;
        }

    </script>
</body>
</html>